package jin.chen.service.impl;

import jin.chen.service.StuService;
import jin.chen.service.TestTranService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class TestTranServiceImpl implements TestTranService {

    @Autowired
    private StuService stuService;

    /**
     * REQUIRED     使用当前的事务，不存在事务，则自己新建一个事务，子方法是要运行在一个事务中的；
     *                          如果当前存在事务，则加入当前事务，形成一个整体。
     *                          老板没饭吃，我自己有钱自己买了吃，老板有饭吃，会分一点
     *
     * SUPPORTS      当前有事务就使用事务，没有事务，就不使用事务
     * MANDATORY    这个传播属性必须要存在一个事务，如果不存在则抛出异常
     * REQUIRES_NEW   如果当前有事务，则使用当前事务，当前没有事务，则自己新建一个，如同REQUIRED
     * NOT_SUPPORTED  如果当前有事务，则把当前事务挂起，不使用事务运行
     * NEVER                    如果当前有事务，则抛出异常
     *NESTED               如果当前有事务，则开启子事务（嵌套事务），嵌套事务是独立提交或者回滚的，
     *                              如果当前没有事务，则如同SUPPORTS
     */
    @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public void testTran() {
        stuService.insertParent();

        stuService.insertSon();

//        int a = 1/0;
    }
}
